#include <stdio.h>
#include <signal.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <linux/types.h>

void input_handler(int signum)
{
    printf("receive a signal from globalfifo, signalnum: %d\n", signum);
}

int main(int argc, char *argv[])
{
    int fd, oflags;

    fd = open("/dev/globalfifo", O_RDWR, S_IRUSR|S_IWUSR);
    if(fd != -1)
    {
        /* 启动信号驱动机制 */
        signal(SIGIO, input_handler);   /* 让input_handler处理SIGIO信号 */
        fcntl(fd, F_SETOWN, getpid());
        oflags = fcntl(fd, F_GETFL);
        fcntl(fd, F_SETFL, oflags|FASYNC);
        /* while只是让程序一直执行,没有别的用途
         * 轮询的方式,是把read等函数放到while里面,
         * 而信号的方式则不用
        */
        while(1)
        {
            sleep(100);
        }
    }
    else
    {
        printf("device open failure\n");
    }

    return 0;
}
